<?php
class User extends UserPeer
{
	public static $status_flag = array('INACTIVE' 	=> '0',
										'ACTIVE'	=> '1',
										'DESACTIVE'	=> '2'
										);
	function User()
	{
		parent::UserPeer();
	}
	
	
	public static function getAllUsers($status=1)
	{
		$database = new Database();
		if ($status != 1)
			$status = 0;
		$query = "SELECT id FROM user WHERE status=$status";
		$result = $database->query($query);
		$ids = $database->fetch_array($result);
		$users = array();
		foreach ($ids as $id) {
			$user = new User();
			$user->select($id['id']);
			$users[] = $user;
		}
		return $users;
	}
	
	public static function authenticate($user)
	{
		$userReturn = NULL;
		
		if ($user)
		{
			$username = $user->getusername();
			$password = $user->getpassword();
			$db = new Database();
			$query = "SELECT id FROM user WHERE username = '".$username."' AND password = '".$password."' AND status = 1 LIMIT 1";
			$result = $db->query($query);
			$id = $db->result;
			$id = mysql_fetch_row($id);
			if (isset($id[0])) {
				$userTemp = new User();
				$userTemp->select($id[0]);
				$userReturn = $userTemp;
			} 
		}
		
		return $userReturn;
	}
	
	function isExistEmail($email)
	{
		$userReturn = NULL;
		$db = new Database();
		
		$query = "SELECT id, status FROM user WHERE email LIKE '".$email."' LIMIT 1";
		$result = $db->query($query);
		$userCheck = $db->result;
		$userCheck = mysql_fetch_row($userCheck);
		$userTest = new User();

		if (isset($userCheck[0])) {
			$userTest->select($userCheck[0]);	
			if ($userCheck[1] == 0) {
				$userTest->sendActiveEmail($email);
			}
			$userReturn = $userTest;
		} 
		
		return $userReturn;
	}
	
	// Send email for client to activate account
	function sendActiveEmail($email=NULL,$password)
	{
		// Email of User
		$emailTo = $this->getemail();
		
		// Email of Admin
		$email = get_bien('email');
		
		// check if token exists
		$token = UserToken::getTokenForUser($this->getid());
		if ($token) {
			$token->generate($email.date('d-m-Y h:m:s'));
			$token->setupdated_at(date('Y-m-d'));
			$token->update($token->getid());
		} else {
			// create a new token for unactive user
			$token = new UserToken();
			$token->generate($email.date('d-m-Y h:m:s'));
			$token->setuser_id($this->getid());
			$token->setcreated_at(date('Y-m-d'));
			$token->setupdated_at(date('Y-m-d'));
			$token->insert();
		}
		
		// create email content
		$subject = "Kích Hoạt Tài Khoản";
		$body = "
			<p>Thưa quý khách hàng,</p>
			<p>Cảm ơn quý khách ".$this->getname()."</p>
		";
		$activate_link = $_SERVER['HTTP_HOST']."/activate_user.php?user_id=".$this->getid()."&token=".$token->gettoken();
		$body .= "
			<p>Click here to activate your account <a href='".$_SERVER['HTTP_HOST']."/activate_user.php?user_id=".$this->getid()."&token=".$token->gettoken()."'>".$activate_link."</a></p>
			Tài khoản của quý khách : 
			Tên truy cập : ".$this->getusername()."
			Mật khẩu : ".$password."
		";
		
		//$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
		//$mail_sent = mail($email, $subject, $body, $headers );
		
		
		/*=====================================
		 * THIET LAP THONG TIN GUI MAIL
		 *=====================================*/
		 
		$mail = new PHPMailer();
		
		$mail->IsSMTP(); // Gọi đến class xử lý SMTP
		$mail->Host       = "smtp.gmail.com"; // tên SMTP server
		$mail->SMTPDebug  = 0; // enables SMTP debug information (for testing)
												   // 1 = errors and messages
												   // 2 = messages only
		$mail->SMTPAuth      = true;     		// enable SMTP authentication
		$mail->SMTPSecure 	 = "ssl";
		$mail->SMTPAuth   = true;                  			// Sử dụng đăng nhập vào account
		$mail->Host       = "smtp.gmail.com"; 				// Thiết lập thông tin của SMPT
		$mail->Port       = 465;                    		// Thiết lập cổng gửi email của máy
		$mail->Username   = "contact.topglobaltravel@gmail.com";        // SMTP account username
		$mail->Password   = "DoanhDoanh";                // SMTP account password
	
		//Thiet lap thong tin nguoi gui va email nguoi gui
		$mail->SetFrom($email, "Top Global Travel");

		//Thiết lập thông tin người nhận
		$mail->AddAddress($emailTo,$this->getusername());
	
		//Thiết lập email nhận email hồi đáp
		//nếu người nhận nhấn nút Reply
		$mail->AddReplyTo($emailTo,$this->getusername());
	
		/*=====================================
		 * THIET LAP NOI DUNG EMAIL
		 *=====================================*/
	
		//Thiết lập tiêu đề
		$mail->Subject    = $subject;
	
		//Thiết lập định dạng font chữ
		$mail->CharSet = "utf-8";
	
		//Thiết lập nội dung chính của email
		$body = strip_tags($body);
			
			
		$mail->Body = $body;
	
		/*if($mail->Send()) {
		  $thong_bao = "OK";
		  //echo "Mailer Error: " . $mail->ErrorInfo;
		} else {
		  $thong_bao = "Có lỗi từ phía máy chủ !";
		  //echo "Message sent!";
		}	
		*/
		
		
		
		
		
		return ($mail->Send()) ? true : false;
	}
	
	// Check and activate account
	function activateUser($token)
	{
		$user_token = UserToken::getTokenForUser($this->getid());
		if ($this->getstatus() == 1)
			return 'error4'; // user is already activated

		if (!$user_token)
			return "error1"; // token doesn't exist
		$two_days_ago = time() - 2*3600*24;
		if (strtotime($user_token->getcreated_at()) < $two_days_ago)
			return "error2"; // token expired
			
		if ($user_token->gettoken() != $token)
			return "error3"; // token is wrong
			
		$this->setstatus(1);
		$this->update($this->getid());
		return 'success';	
	}
	
	
	public static function retriveByUsername($username)
	{
		$db = new Database();
		$query = "SELECT id FROM user WHERE username = '".$username."'";
		$db->query($query);
		$result = $db->result;
		$id = mysql_fetch_row($result);
		if (isset($id[0])) {
			$user = new User();
			$user->select($id[0]);
			return $user;
		}
		return null;
	}
	
	function getAllInvoices()
	{
		$database = new Database();
		$query = "SELECT id FROM invoice WHERE user_id = ".$this->getid();
		$result = $database->query($query);
		$ids = $database->fetch_array($result);
		$invoices = array();
		foreach ($ids as $id) {
			$invoice = new Invoice();
			$invoice->select($id['id']);
			$invoices[] = $invoice;
		}
		return $invoices;
	}
}
?>